package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/gorilla/websocket"
	"log"
	"net/http"
	"time"
)

var upgrader = websocket.Upgrader{
	// 这个是校验请求来源
	// 在这里我们不做校验，直接return true
	CheckOrigin: func(r *http.Request) bool {
		return true
	},
}

func SetupRouter() *gin.Engine {
	router := gin.Default()
	router.POST("/PostPing", func(context *gin.Context) {
		// 解析请求体中的JSON数据
		var jsonData struct {
			Name string `json:"name"`
			Agr  string `json:"agr"`
		}
		if err := context.ShouldBindJSON(&jsonData); err != nil {
			context.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
			return
		}
		// 这里只是简单地将接收到的数据返回作为示例
		context.JSON(http.StatusOK, gin.H{"name": jsonData.Name, "agr": jsonData.Agr})
	})
	router.GET("/GetPing", func(context *gin.Context) {
		context.String(200, "pong")
	})
	router.GET("/helloWebSocket", func(context *gin.Context) {
		// 将普通的http GET请求升级为websocket请求
		client, _ := upgrader.Upgrade(context.Writer, context.Request, nil)
		for {
			// 每隔两秒给前端推送一句消息“hello, WebSocket”
			err := client.WriteMessage(websocket.TextMessage, []byte("hello, WebSocket"))
			if err != nil {
				log.Println(err)
			}
			time.Sleep(time.Second * 2)
		}
	})
	return router
}

func main() {
	r := SetupRouter()
	err := r.Run(":8080")
	if err != nil {
		fmt.Println("服务器启动失败！")
	}
}
